<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>天气案例_监视属性</title>
    <!--引入vue-->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!-- 
        监视属性的watch
            1、当被监视属性发生变化时，回调函数自动调用，进行相关操作
            2、监视的属性必须存在，才能进行监视！！！
            3、监视的两种写法：
                (1).通过new Vue时传入watch配置
                (2).通过vm.$watch监视
     -->





    <!--准备好一个容器-->
    <div id="root">
    <h2>今天天气很{{info}}</h2>
    <button @click="changeWeather">切换天气</button>
    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成使用生产版本提示。
    // 创建Vue实例
  const vm =   new Vue({
        el:'#root',
        data:{
            isHot:true // true-热  false-凉爽
        },
        // 计算属性
        computed:{
            info(){ // 该计算属性只负责展示，不涉及数据的修改 可以用简写的形式
                return this.isHot ? '炎热':'凉爽' 
                } // 注意使用 "this.属性"的方式 才能拿到isHot 因为该属性在vm身上
            },
        methods: {
            changeWeather(){
                this.isHot = !this.isHot
            }
        },    
        // watch监视属性 实现方式一（明确知道监视属性时使用）
        /* watch  监视属性的配置项  里面写想要监视的属性的key值  */
       /*  watch:{
            info:{ // 监视计算属性
                immediate:true, // 初始化时让handler调用一下          
                // handler什么时候调用呢？   当isHot发生改变时，handler会被调用
                handler(newValue,oldValue){
                    console.log('info被修改了',newValue,oldValue);
                }
            },
            isHot:{
                immediate:true, // 初始化时让handler调用一下          
                // handler什么时候调用呢？   当isHot发生改变时，handler会被调用
                handler(newValue,oldValue){
                    console.log('isHot被修改了',newValue,oldValue);
                }
            }
        } */
    })

     
    // 使用vm实现属性的监视  实现方式二  不确定监视属性是谁时使用
    vm.$watch('isHot',{
        immediate:true,
        handler(newValue,oldValue){
          console.log('isHot被修改了',newValue,oldValue);
         }
    })
</script>
</html>
